package com.geekgo.flowcontroller.annotation;

import com.geekgo.flowcontroller.common.Rates;
import com.geekgo.flowcontroller.core.RateLimitStrategy;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author geekgo
 * @version 2016/8/3 17:03
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface QPSRate {

    /**
     * 如果不指定，则是所加方法的全称
     * @return
     */
    String key() default "";

    /**
     * 方法不指定值的话，默认使用所在类的rate值
     * @see RateLimit
     */
    double rate() default Rates.RATE_USING_SUPER;

    /**
     * 一次调用需要多少个rate 默认为1
     * @return
     */
    int acquire() default 1;

    /**
     * 如果存在相同的key，则使用什么处理策略
     * @return
     */
    RateLimitStrategy strategy() default RateLimitStrategy.USE_MIN;
}
